package com.hc.advice;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

//放置所有的增强功能
@Slf4j
@Component
@Aspect
public class MyAdvice {

//    //切入点
//    @Pointcut("execution(public * com.hc.controller.*Controller.*(..))")
//    public void fun() {
//    }
//
//    //记录谁在什么时间在哪里做了什么事情
//    @Before("fun()")
//    public void before(JoinPoint joinPoint) {//连接点
//        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
//        if (null == request) {
//            log.info("获取request失败.直接返回");
//            return;
//        }
//
//        User user = null;
//        Object objUser = request.getSession().getAttribute("current_user");
//        if (objUser != null) {
//            user = (User) objUser;
//        }
//
//        String ipAdrress = getIpAdrress(request);
//
//        Signature signature = joinPoint.getSignature();
//        Object[] args = joinPoint.getArgs();
//
//        String who = user == null ? ipAdrress : user.getName() + "(" + ipAdrress+ ")";
//        log.info("[\t" + who + "\t" + new Date() + "\tcalled method: " + signature + "\t Arguments:" + Arrays.asList(args));
//    }
//
//    @After("fun()")
//    public void after() {
//        log.info(new Date() + "\t]");
//    }
//
//    /**
//     * 获取Ip地址
//     *
//     * @param request
//     * @return
//     */
//    private static String getIpAdrress(HttpServletRequest request) {
//        String Xip = request.getHeader("X-Real-IP");
//        String XFor = request.getHeader("X-Forwarded-For");
//        if (StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)) {
//            //多次反向代理后会有多个ip值，第一个ip才是真实ip
//            int index = XFor.indexOf(",");
//            if (index != -1) {
//                return XFor.substring(0, index);
//            } else {
//                return XFor;
//            }
//        }
//        XFor = Xip;
//        if (StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)) {
//            return XFor;
//        }
//        if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
//            XFor = request.getHeader("Proxy-Client-IP");
//        }
//        if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
//            XFor = request.getHeader("WL-Proxy-Client-IP");
//        }
//        if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
//            XFor = request.getHeader("HTTP_CLIENT_IP");
//        }
//        if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
//            XFor = request.getHeader("HTTP_X_FORWARDED_FOR");
//        }
//        if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
//            XFor = request.getRemoteAddr();
//        }
//        return XFor;
//    }


}
